/**
 * 
 */
package view;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

import kernel.GeraEventoSim;
import kernel.Valores;

public class ConsoleSimulacao {
	
	private double taxaServico;
	private String newLine = "\n";

	public ConsoleSimulacao() {

		try {
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					System.in));

			String linha = "";
			
			System.out.println("Digite a taxa de Serviço: \n");
			System.out.println("Opções: 0.2 | 0.4 | 0.6 | 0.8 | 0.9 \n");
			
			//le dados da tela ate q a taxa digitada seja valida
			while(!this.validaTaxaServico()){
				linha = reader.readLine();
				taxaServico = Double.parseDouble(linha);
			}
			
			iniciarSimulacao();
			
		} catch (IOException e) {
			System.out.println("Erro: " + e);
		}
	}
	
	private void iniciarSimulacao() {

		//tempo atual
		long start = System.currentTimeMillis();  
		
		System.out.println("Simulação iniciada ... " + newLine);

		System.out.println("O cenario escolhido é referente a fila FCFS : ..."
				+ newLine);

		System.out
				.println("A taxa de utilização do servidor escolhida foi a taxa : "
						+ taxaServico * 2 + "..." + newLine);

		System.out.println("Começando simulação ... " + newLine);
		
		Valores.txChegada = taxaServico;

		GeraEventoSim gerador = GeraEventoSim.getInstance();

		while (gerador.atenderEventoSeguinte())
			;

		System.out.println(gerador.getResult());
		
		//calcula o tempo de execucao em funcao do corrente e do start
		long delay = (System.currentTimeMillis() - start);
		long segundos = delay /1000;
		
		System.out.println("Tempo de execução do simulador (em mileseg): " + delay);
		System.out.println("Tempo de execução do simulador (em seg): " + segundos);

	}

	//verifica se a taxa digitada eh uma das aceitas pelo simulador
	public boolean validaTaxaServico(){
		
		if(taxaServico == 0.2)	
			taxaServico = 0.1;
		else if (taxaServico == 0.4)
			taxaServico = 0.2;
		else if (taxaServico == 0.6)
			taxaServico = 0.3;
		else if (taxaServico == 0.8)
			taxaServico = 0.4;
		else if (taxaServico == 0.9)
			taxaServico = 0.45;
		else
			return false;
		
		return true;
	}

	public void setTaxaServico(double taxaServico) {
		this.taxaServico = taxaServico;
	}

	public double getTaxaServico() {
		return taxaServico;
	}

	public void setNewLine(String newLine) {
		this.newLine = newLine;
	}

	public String getNewLine() {
		return newLine;
	}

}
